home *** CD-ROM | disk | FTP | other *** search
-
- type
- long = array[0..3] of byte; {defines the fake-longint type}
- string8 = string[8];
-
- {translate the significant portion of a real into a long var}
- procedure real2long(r:real; var l:long; var e:boolean);
- type
- string8 = string[8];
- string32 = string[32];
- var
- s : string32;
-
- function power(b:real; x:integer; var e:boolean): real;
- begin
- if b > 0 then
- power:= exp(x * ln(b))
- else halt;
- end;
-
- {translate the significant portion of a real into a binary string32}
- procedure intreal2binstr(r:real; var s:string32; var e:boolean);
- var
- i : integer;
- m : real;
- p : real;
- begin
- e:= false;
- if (r > power(2,32,e)-1) then begin
- e:= true;
- exit;
- end;
- s:= '';
- for i:= 31 downto 1 do begin
- p:= power(2,i,e);
- m:= int(r/p);
- r:= r - (m * p);
- if (int(m) = 0) then s:= s + '0'
- else s:= s + '1';
- end;
- m:= int(r);
- r:= r - m;
- if (int(m) = 0) then s:= s + '0'
- else s:= s + '1';
- end;
-
- {translate a binary string32 into a long variable}
- procedure binstr2long(s: string32; var l:long; var e:boolean);
- var
- i : integer;
- w : string[8];
- b : byte;
-
- {translate a binary string8 into a byte}
- procedure binstr2byte(s:string8; var y:byte; var e:boolean);
- var
- i : integer;
- v : integer;
- c : integer;
- b : byte;
- begin
- y:= 0;
- for i:= 1 to 8 do begin
- val(s[i],v,c);
- e:= not(c = 0);
- if e then exit;
- b:= v * trunc(power(2,(8-i),e));
- y:= y or b;
- end;
- end;
-
- begin {binstr2long}
- for i:= 0 to 3 do begin
- w:= copy(s,(i*8)+1,8);
- binstr2byte(w,b,e);
- l[3 - i]:= b;
- end;
- end;
-
- begin {real2long}
- intreal2binstr(r,s,e);
- if e then exit;
- binstr2long(s,l,e);
- if e then exit;
- end;
-
- {translate a string8 (a number in hex notation) into a long variable}
- procedure str2long(s:string8; var l:long; var e: boolean);
- var
- i : integer;
- c : integer;
- v : integer;
- sb : array[0..3] of string[3];
- begin
- for i:= 0 to 3 do begin
- sb[i]:= '$' + copy(s,(7-(i*2)),2);
- val(sb[i],v,c);
- e:= not(c = 0);
- if e then exit;
- l[i]:= v;
- end;
- end;
-
- {translate an integer into a long variable}
- procedure int2long(i:integer; var l: long);
- begin
- fillchar(l,sizeof(l),0);
- move(i,l,2);
- end;
-
- {"shr 8" for long variables}
- procedure shr8(var a,b: long);
- var
- i : integer;
- begin
- for i:= 0 to 2 do
- b[i]:= a[(i+1)];
- b[3]:= 0;
- end;
-
- {"xor" for long variables}
- procedure xorl(var a,b,c : long);
- var
- i : integer;
- begin
- for i:= 0 to 3 do
- c[i]:= a[i] xor b[i];
- end;
-
- {"and" for long variables}
- procedure andl(var a,b,c : long);
- var
- i : integer;
- begin
- for i:= 0 to 3 do
- c[i]:= a[i] and b[i];
- end;
-
- BEGIN
- END.